package com.zsc.edu.testfragment;

import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ChatViewHolder> {

    private List<ChatMessage> chatMessages;

    public ChatAdapter(List<ChatMessage> chatMessages) {
        this.chatMessages = chatMessages;
    }


    @NonNull
    @Override
    public ChatViewHolder onCreateViewHolder(@NonNull  ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_bubble, parent, false);
        return new ChatViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull  ChatAdapter.ChatViewHolder holder, int position) {
        // 根据位置获得聊天消息
        ChatMessage chatMessage = chatMessages.get(position);
        // 设置 聊天消息的内容
        holder.text_view_msg.setText(chatMessage.getMessage());

        // 根据发送者设置布局参数
        if (chatMessage.isSender()) {
            // 右侧背景
            holder.text_view_msg.setBackgroundResource(R.drawable.right_bubble_background);
            // 内部右对齐
            holder.linear_layout.setGravity(Gravity.END);
            // 发送者头像
            holder.image_view_avatar.setImageResource(R.drawable.sender);

            // 以下将头像与聊天内容对换位置，默认聊天内容在头像右侧
            // 获取第二个子视图，也就是聊天内容
            View viewToMove = holder.linear_layout.getChildAt(1);
            // 从LinearLayout中移除第二个子视图
            holder.linear_layout.removeView(viewToMove);
            // 将第二个子视图添加到第一个位置，这样聊天内容就处于头像左侧
            holder.linear_layout.addView(viewToMove, 0);
            // 请求LinearLayout重新布局
            holder.linear_layout.requestLayout();

        } else {
            // 左侧背景
            holder.text_view_msg.setBackgroundResource(R.drawable.left_bubble_background);
            // 内部左对齐
            holder.linear_layout.setGravity(Gravity.START);
            // 接收者头像
            holder.image_view_avatar.setImageResource(R.drawable.receiver);
        }
    }

    @Override
    public int getItemCount() {
        return chatMessages.size();
    }

    public static class ChatViewHolder extends RecyclerView.ViewHolder {
        // 对应子项布局的三个UI控件
        ImageView image_view_avatar;
        TextView text_view_msg;
        LinearLayout linear_layout;

        public ChatViewHolder(@NonNull View itemView) {
            super(itemView);
            image_view_avatar = itemView.findViewById(R.id.image_view_avatar);
            text_view_msg = itemView.findViewById(R.id.text_view_msg);
            linear_layout = itemView.findViewById(R.id.linear_layout);
        }
    }
}
